def validate_id_number(id_card):
    if len(id_card) != 18:
        return False

    if not id_card[:17].isdigit() or (id_card[17] not in '0123456789Xx'):
        return False

    coefficients = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    check_codes = '10X98765432'

    total = sum(int(id_card[i]) * coefficients[i] for i in range(17))
    mod_result = total % 11
    expected_check_code = check_codes[mod_result]

    return id_card[17].upper() == expected_check_code
